/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.prsistema.DAO;

import com.prsistema.utilitarias.Produto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Leonardo
 */
public class DAOProduto {

    private Connection conector;

    public DAOProduto(Connection conector) {
        this.conector = conector;
    }

    public boolean insert(Produto prod) {
        PreparedStatement pstm = null;
        try {
            final String sql = "insert into produto (prod_Nome, prod_pesoSaco, prod_pesoUnidade, prod_precoCompra, prod_precoVenda, "
                    + "prod_uniEstoque, prod_uniVendido, prod_infoAdd) VALUES (?,?,?,?,?,?,?,?)";
            pstm = conector.prepareStatement(sql);

            pstm.setString(1, prod.getNome());
            pstm.setFloat(2, prod.getPesoSaco());
            pstm.setFloat(3, prod.getPesoUnidade());
            pstm.setFloat(4, prod.getPrecoCompra());
            pstm.setFloat(5, prod.getPrecoVenda());
            pstm.setLong(6, prod.getUniEstoque());
            pstm.setLong(7, prod.getUniVendido());
            pstm.setString(8, prod.getInfoAdd());
            pstm.executeUpdate();
            pstm.close();
            
            return true;

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao salvar no Banco de Dados: " + ex);
            return false;
        }
    }

    public boolean delete(Produto prod) {
        PreparedStatement pstm = null;
        try {
            final String sql = "delete from produto where prod_id=(?)";
            pstm = this.conector.prepareStatement(sql);
            pstm.setLong(1, prod.getId());
            pstm.executeUpdate();
            pstm.close();
            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro ao excluir: " + erro);
            return false;
        }
    }
    
    public boolean update(Produto prod){
        PreparedStatement pstm = null;
        try {
            final String sql = "update produto set prod_nome=(?), prod_pesoSaco=(?), prod_pesoUnidade=(?), prod_precoCompra=(?), "
                    + "prod_precoVenda=(?), prod_uniEstoque=(?), prod_uniVendido=(?), prod_infoAdd=(?) where prod_id=(?)";
     
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, prod.getNome());
            pstm.setFloat(2, prod.getPesoSaco());
            pstm.setFloat(3, prod.getPesoUnidade());
            pstm.setFloat(4, prod.getPrecoCompra());
            pstm.setFloat(5, prod.getPrecoVenda());
            pstm.setLong(6, prod.getUniEstoque());
            pstm.setLong(7, prod.getUniVendido());
            pstm.setString(8, prod.getInfoAdd());
            pstm.setLong(9, prod.getId());
            pstm.executeUpdate();
            pstm.close();
            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro ao alterar: " + erro);
            return false;
        }
    }

    public ArrayList<Produto> selectAll() {
        ArrayList<Produto> prod = new ArrayList<Produto>();
        PreparedStatement pstm = null;


        try {
            String sql = "select * from produto order by prod_nome";
            pstm = this.conector.prepareStatement(sql);
            ResultSet resultado = pstm.executeQuery();

            while (resultado.next()) {
                Produto pd = new Produto();

                pd.setId(resultado.getLong("prod_id"));
                pd.setNome(resultado.getString("prod_nome"));
                pd.setPesoSaco(resultado.getFloat("prod_pesoSaco"));
                pd.setPesoUnidade(resultado.getFloat("prod_pesoUnidade"));
                pd.setPrecoCompra(resultado.getFloat("prod_precoCompra"));
                pd.setPrecoVenda(resultado.getFloat("prod_precoVenda"));
                pd.setUniEstoque(resultado.getLong("prod_uniEstoque"));
                pd.setUniVendido(resultado.getLong("prod_uniVendido"));
                pd.setInfoAdd(resultado.getString("prod_infoAdd"));

                prod.add(pd);
            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro ao carregar dados: " + ex);
            prod = null;
        } finally {
            return prod;
        }
    }
    
    public Produto select(String nomeProd) {
        Produto prod = new Produto();
        PreparedStatement pstm = null;
        
        try {

            final String sql = "select * from produto where prod_nome=(?)";
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, nomeProd);
            ResultSet resultado = pstm.executeQuery();

            if (resultado.next()) {
                prod.setId(resultado.getLong("prod_id"));
                prod.setNome(resultado.getString("prod_nome"));
                prod.setPesoSaco(resultado.getFloat("prod_pesoSaco"));
                prod.setPesoUnidade(resultado.getFloat("prod_pesoUnidade"));
                prod.setPrecoCompra(resultado.getFloat("prod_precoCompra"));
                prod.setPrecoVenda(resultado.getFloat("prod_precoVenda"));
                prod.setUniEstoque(resultado.getLong("prod_uniEstoque"));
                prod.setUniVendido(resultado.getLong("prod_uniVendido"));
                prod.setInfoAdd(resultado.getString("prod_infoAdd"));
            }
            pstm.close();
            
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Falha ao carregar dados, erro: " + ex);
        }finally{
            return prod;
        }
    }
}